import pandas as pd
import matplotlib.pyplot as plt

# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300

# 正常显示中文，更换中文字体为 SimHei
plt.rcParams['font.sans-serif'] = ['SimHei']

# 读取文件
try:
    excel_file = pd.ExcelFile('project//练习一//FhjlViewDD.xlsx')
    # 获取指定工作表中的数据
    df = excel_file.parse('FhjlViewDD')

    # 将创建时间列转换为日期时间类型
    df['创建时间'] = pd.to_datetime(df['创建时间'])

    # 筛选出6月份的数据
    june_data = df[df['创建时间'].dt.month == 6]

    # 按发货地分组，统计各发货地的发货总量
    origin_demand = june_data.groupby('发货地')['到站吨位'].sum().reset_index()

    print('6月份各发货地的发货总量：\n', origin_demand)

    # 绘制柱状图
    plt.figure(figsize=(10, 6))
    bars = plt.bar(origin_demand['发货地'], origin_demand['到站吨位'])

    # 添加数据标签
    for bar in bars:
        height = bar.get_height()
        plt.annotate(f'{height:.2f}', xy=(bar.get_x() + bar.get_width() / 2, height),
                     xytext=(0, 3), textcoords='offset points', ha='center', va='bottom')

    # 设置标题和坐标轴标签
    plt.title('6月份各发货地的发货总量柱状图')
    plt.xlabel('发货地')
    plt.ylabel('发货总量')

    # 调整子图布局，增加四周的空白
    plt.subplots_adjust(left=0.15, right=0.95, top=0.9, bottom=0.25)

    # 旋转 x 轴刻度
    plt.xticks(rotation=45)

    # 显示图形
    plt.show()
except FileNotFoundError:
    print('未找到文件，请检查文件路径是否正确。')
except KeyError as e:
    print(f'数据中缺少必要的列: {e}')
except Exception as e:
    print(f'发生未知错误: {e}')